package lanqiaobei2017;

import java.util.HashSet;
import java.util.Set;

public class _02九数算式 {
    /**
     * 观察如下的算式：
     * 9213 x 85674 = 789314562
     * 左边的乘数和被乘数正好用到了1~9的所有数字，每个1次。
     * 而乘积恰好也是用到了1~9的所有数字，并且每个1次。
     * 请你借助计算机的强大计算能力，找出满足如上要求的9数算式一共有多少个？
     * 注意：
     * 1. 总数目包含题目给出的那个示例。
     * 2. 乘数和被乘数交换后作为同一方案来看待。
     * 输出
     * 输出一个整数表示答案
     */
    static int ans = 0;
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5,6,7,8,9};
        per(a,0);
        System.out.println(ans/2);
    }

    private static void per(int[] a, int k) {
        if ( k == 9){
            //确定乘号的位置
            for (int i = 1; i <= 8 ;i++){
                int x1 = a2i(a,0,i);
                int x2 = a2i(a,i,9);
                if (check(x1*x2)) ans ++;
            }
        }
        for (int i = k ; i < 9 ; i++){
            int temp = a[i];
            a[i] = a[k];
            a[k] = temp;

            per(a,k+1);

            temp = a[i];
            a[i] = a[k];
            a[k] = temp;
        }
    }

    private static boolean check(int x) {
        String s = x +"";
        if (s.length()!=9 || s.indexOf('0')>-1)return false;
        Set<Character> set = new HashSet<Character>();
        for (int i =0 ;i < s.length(); i++){
            set.add(s.charAt(i));
        }
        return set.size() == 9;
    }

    private static int a2i(int[] a, int i, int k) {
        int ans = 0;
        int p = 1;
        for (int j = k -1; j >= i ; j--){
            ans += a[j]*p;
            p=p*10;
        }
        return ans;
    }

}
